package com.example.demo.controller;

import com.example.demo.entity.GoodsSkus;
import com.example.demo.entity.GoodsSkusValue;
import com.example.demo.service.GoodsSkusService;
import com.example.demo.controller.vo.GoodsSkusRequest;
import com.example.demo.controller.vo.ResponseResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/admin/goods_skus")
public class GoodsSkusController {

    @Autowired
    private GoodsSkusService goodsSkusService;

    /**
     * 创建商品SKU
     *
     * @param goodsSkus 商品SKU信息
     * @return 创建成功的商品SKU信息
     */
    @PostMapping
    public ResponseResult<GoodsSkus> createGoodsSkus(@RequestBody GoodsSkus goodsSkus) {
        GoodsSkus created = goodsSkusService.createGoodsSkus(goodsSkus);
        return ResponseResult.success(created);
    }

    /**
     * 更新商品SKU信息
     *
     * @param id 商品ID
     * @param goodsSkus 商品SKU信息
     * @return 更新操作的结果，以ResponseResult<Boolean>对象形式返回
     */
    @PostMapping("/{id}")
    public ResponseResult<Boolean> updateGoodsSkus(@PathVariable Integer id, @RequestBody GoodsSkus goodsSkus) {
        goodsSkus.setId(id);
        boolean result = goodsSkusService.updateGoodsSkus(goodsSkus);
        return ResponseResult.success(result);
    }

    /**
     * 删除商品SKU
     *
     * @param id 商品SKU的ID
     * @return 删除操作的结果，包括操作是否成功以及操作后的数据
     */
    @PostMapping("/{id}/delete")
    public ResponseResult<Boolean> deleteGoodsSkus(@PathVariable Integer id) {
        boolean result = goodsSkusService.deleteGoodsSkus(id);
        return ResponseResult.success(result);
    }
    
    /**
     * 更新商品SKU排序
     *
     * @param goodsSkusList 商品SKU列表
     * @return ResponseResult<Boolean> 包含操作结果的响应对象
     */
    @PostMapping("/sort")
    public ResponseResult<Boolean> updateGoodsSkusOrder(@RequestBody List<GoodsSkus> goodsSkusList) {
        boolean result = goodsSkusService.updateGoodsSkusOrder(goodsSkusList);
        return ResponseResult.success(result);
    }

    /**
     * 创建商品SKU值
     *
     * @param goodsSkusValue 商品SKU值对象
     * @return 包含创建的商品SKU值对象的响应结果
     */
    @PostMapping("/value")
    public ResponseResult<GoodsSkusValue> createGoodsSkusValue(@RequestBody GoodsSkusValue goodsSkusValue) {
        GoodsSkusValue created = goodsSkusService.createGoodsSkusValue(goodsSkusValue);
        return ResponseResult.success(created);
    }

    /**
     * 更新商品SKU的值
     *
     * @param id 商品SKU的ID
     * @param goodsSkusValue 包含要更新的商品SKU值的对象
     * @return ResponseResult 包含操作结果的ResponseResult对象
     */
    @PostMapping("/value/{id}")
    public ResponseResult<Boolean> updateGoodsSkusValue(@PathVariable Integer id, @RequestBody GoodsSkusValue goodsSkusValue) {
        goodsSkusValue.setId(id);
        boolean result = goodsSkusService.updateGoodsSkusValue(goodsSkusValue);
        return ResponseResult.success(result);
    }

    /**
     * 删除商品SKU的值
     *
     * @param id 商品SKU的ID
     * @return ResponseResult<Boolean> 删除结果，成功返回true，失败返回false
     */
    @PostMapping("/value/{id}/delete")
    public ResponseResult<Boolean> deleteGoodsSkusValue(@PathVariable Integer id) {
        boolean result = goodsSkusService.deleteGoodsSkusValue(id);
        return ResponseResult.success(result);
    }

    /**
     * 根据商品SKU ID获取商品SKU值列表
     *
     * @param id 商品SKU ID
     * @return 包含商品SKU值列表的响应结果
     */
    @GetMapping("/{id}/values")
    public ResponseResult<List<GoodsSkusValue>> getGoodsSkusValueBySkuId(@PathVariable Integer id) {
        List<GoodsSkusValue> goodsSkusValueList = goodsSkusService.getGoodsSkusValueBySkuId(id);
        return ResponseResult.success(goodsSkusValueList);
    }

    /**
     * 设置商品SKU及其属性值
     *
     * @param id 商品ID
     * @param requestBody 请求体，包含商品名称和属性值列表
     * @return 设置结果，包括状态码和结果数据
     */
    @PostMapping("/{id}/set")
    public ResponseResult<Map<String, Object>> setGoodsSkusAndValues(
            @PathVariable Integer id,
            @RequestBody GoodsSkusRequest requestVO) {
        String name = requestVO.getName();
        Integer goodsId = requestVO.getGoods_id();
        List<String> values = requestVO.getValues();
        Map<String, Object> result = goodsSkusService.setGoodsSkusAndValues(id, goodsId, name, values);
        return ResponseResult.success(result);
    }
}
